"""
虚拟币合约量化交易系统 - 主程序入口
"""
import sys
import argparse
from pathlib import Path

# 添加项目根目录到路径
sys.path.insert(0, str(Path(__file__).parent))

from utils.logger import log_info, log_error, log_warning
from utils.config_loader import config


def parse_arguments():
    """解析命令行参数"""
    parser = argparse.ArgumentParser(
        description='虚拟币合约量化交易系统',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
使用示例:
  # 运行模拟盘双均线策略
  python main.py --mode demo --strategy ma_cross
  
  # 运行多个策略
  python main.py --mode demo --strategy ma_cross,rsi
  
  # 回测策略
  python main.py --mode backtest --strategy ma_cross --start 2024-01-01 --end 2024-10-01
  
  # 启动Agent API服务
  python main.py --mode agent --port 8000
        """
    )
    
    parser.add_argument(
        '--mode',
        type=str,
        choices=['demo', 'live', 'backtest', 'agent'],
        default='demo',
        help='运行模式: demo=模拟盘, live=实盘, backtest=回测, agent=API服务'
    )
    
    parser.add_argument(
        '--strategy',
        type=str,
        help='策略名称，多个策略用逗号分隔，如: ma_cross,rsi'
    )
    
    parser.add_argument(
        '--symbol',
        type=str,
        default='BTC-USDT-SWAP',
        help='交易对，默认: BTC-USDT-SWAP'
    )
    
    parser.add_argument(
        '--start',
        type=str,
        help='回测开始日期，格式: YYYY-MM-DD'
    )
    
    parser.add_argument(
        '--end',
        type=str,
        help='回测结束日期，格式: YYYY-MM-DD'
    )
    
    parser.add_argument(
        '--port',
        type=int,
        default=8000,
        help='Agent API服务端口，默认: 8000'
    )
    
    parser.add_argument(
        '--config',
        type=str,
        help='自定义配置文件路径'
    )
    
    parser.add_argument(
        '--log-level',
        type=str,
        choices=['DEBUG', 'INFO', 'WARNING', 'ERROR'],
        default='INFO',
        help='日志级别'
    )
    
    return parser.parse_args()


def run_demo_mode(strategies: list, symbol: str):
    """
    运行模拟盘模式
    
    参数:
        strategies: 策略列表
        symbol: 交易对
    """
    log_info("=" * 60)
    log_info("启动模拟盘交易模式")
    log_info("=" * 60)
    log_info(f"交易对: {symbol}")
    log_info(f"策略: {', '.join(strategies)}")
    log_info(f"配置环境: {config.env}")
    
    # TODO: 实现模拟盘交易逻辑
    log_warning("模拟盘交易功能开发中...")
    log_info("提示: 请先完成以下任务:")
    log_info("  1. 实现OKX交易所接口封装")
    log_info("  2. 实现交易引擎核心逻辑")
    log_info("  3. 实现风险管理模块")
    log_info("  4. 配置OKX API密钥（模拟盘）")


def run_live_mode(strategies: list, symbol: str):
    """
    运行实盘模式
    
    参数:
        strategies: 策略列表
        symbol: 交易对
    """
    log_warning("=" * 60)
    log_warning("警告: 实盘交易模式")
    log_warning("=" * 60)
    log_warning("实盘交易存在资金风险，请谨慎操作！")
    
    # 安全确认
    confirm = input("确认要启动实盘交易吗？(输入 YES 确认): ")
    if confirm != "YES":
        log_info("已取消实盘交易")
        return
    
    log_info(f"交易对: {symbol}")
    log_info(f"策略: {', '.join(strategies)}")
    
    # TODO: 实现实盘交易逻辑
    log_warning("实盘交易功能开发中...")
    log_info("提示: 实盘交易前请确保:")
    log_info("  1. 已在模拟盘充分测试")
    log_info("  2. 已配置实盘API密钥")
    log_info("  3. 已设置合理的风险参数")
    log_info("  4. 已启用监控告警")


def run_backtest_mode(strategies: list, symbol: str, start_date: str, end_date: str):
    """
    运行回测模式
    
    参数:
        strategies: 策略列表
        symbol: 交易对
        start_date: 开始日期
        end_date: 结束日期
    """
    log_info("=" * 60)
    log_info("启动策略回测模式")
    log_info("=" * 60)
    log_info(f"交易对: {symbol}")
    log_info(f"策略: {', '.join(strategies)}")
    log_info(f"回测区间: {start_date} 至 {end_date}")
    
    # TODO: 实现回测逻辑
    log_warning("回测功能开发中...")
    log_info("提示: 回测功能需要:")
    log_info("  1. 历史K线数据")
    log_info("  2. 回测引擎实现")
    log_info("  3. 性能分析模块")


def run_agent_mode(port: int):
    """
    运行Agent API服务模式
    
    参数:
        port: 服务端口
    """
    log_info("=" * 60)
    log_info("启动Agent API服务")
    log_info("=" * 60)
    log_info(f"服务端口: {port}")
    log_info(f"API文档: http://localhost:{port}/docs")
    
    # TODO: 实现Agent API服务
    log_warning("Agent API服务开发中...")
    log_info("提示: Agent API需要:")
    log_info("  1. FastAPI服务实现")
    log_info("  2. JWT认证机制")
    log_info("  3. 接口权限控制")
    log_info("  4. 决策审核流程")


def main():
    """主函数"""
    try:
        # 解析命令行参数
        args = parse_arguments()
        
        # 显示欢迎信息
        log_info("")
        log_info("╔════════════════════════════════════════════════════════════╗")
        log_info("║      虚拟币合约量化交易系统 v1.0.0                        ║")
        log_info("║      Crypto Futures Quantitative Trading System           ║")
        log_info("╚════════════════════════════════════════════════════════════╝")
        log_info("")
        
        # 解析策略列表
        strategies = []
        if args.strategy:
            strategies = [s.strip() for s in args.strategy.split(',')]
        
        # 根据模式运行
        if args.mode == 'demo':
            if not strategies:
                log_error("错误: 请指定要运行的策略 (--strategy)")
                sys.exit(1)
            run_demo_mode(strategies, args.symbol)
        
        elif args.mode == 'live':
            if not strategies:
                log_error("错误: 请指定要运行的策略 (--strategy)")
                sys.exit(1)
            run_live_mode(strategies, args.symbol)
        
        elif args.mode == 'backtest':
            if not strategies:
                log_error("错误: 请指定要回测的策略 (--strategy)")
                sys.exit(1)
            if not args.start or not args.end:
                log_error("错误: 回测模式需要指定开始和结束日期 (--start, --end)")
                sys.exit(1)
            run_backtest_mode(strategies, args.symbol, args.start, args.end)
        
        elif args.mode == 'agent':
            run_agent_mode(args.port)
        
    except KeyboardInterrupt:
        log_info("\n收到中断信号，正在安全退出...")
        # TODO: 清理资源，平仓等
        log_info("系统已安全退出")
    
    except Exception as e:
        log_error(f"系统错误: {str(e)}")
        import traceback
        log_error(traceback.format_exc())
        sys.exit(1)


if __name__ == "__main__":
    main()
